package com.jumi.microservice.dto;

import com.jumi.microservice.common.base.dto.BaseRequest;
import com.jumi.microservice.constant.PayChannelEnum;

import java.math.BigDecimal;

/**
 * @author Dirk
 * @Date 2020-08-31 09:20
 * 退款方式：订单全额退款、订单多商品部分退款
 * 支付方式：一个支付单号对应多个订单号、一个支付单号对应一个订单号
 * 支付宝、微信中的out_trade_no对应本平台支付单号payNo
 */
public class RefundRequest extends BaseRequest {
    private static final long serialVersionUID = 5987282708179924851L;

    private Long uid;
    /**
     * 支付渠道
     */
    private PayChannelEnum payChannel;

    /**
     * 订单号【全额退款】
     * 退款单号【部分退款】
     * 支付宝：out_request_no 标识一次退款请求，同一笔交易多次退款需要保证唯一，如需部分退款，则此参数必传
     * 微信：out_refund_no 商户系统内部的退款单号，商户系统内部唯一，同一退款单号多次请求只退一笔。
     */
    private String orderSn;

    /**
     * 支付单号
     * 支付宝：out_trade_no 订单支付时传入的商户订单号，不能和trade_no同时为空
     * 微信：out_trade_no 微信生成的订单号，不能和transaction_id同时为空，如果同时存在优先级：transaction_id > out_trade_no
     */
    private String payNo;

    /**
     * 第三方支付单号
     * 支付宝：trade_no 支付宝交易号，不能和out_trade_no同时为空
     * 微信：transaction_id 微信生成的订单号，不能和out_trade_no同时为空，如果同时存在优先级：transaction_id > out_trade_no
     */
    private String thirdPartyPaySn;

    /**
     * 支付单号支付的总金额
     */
    private BigDecimal payTotalAmount;

    /**
     * 退款金额
     */
    private BigDecimal amount;

    /**
     * 退款描述
     */
    private String desc;

    public Long getUid() {
        return uid;
    }

    public void setUid(Long uid) {
        this.uid = uid;
    }

    public PayChannelEnum getPayChannel() {
        return payChannel;
    }

    public void setPayChannel(PayChannelEnum payChannel) {
        this.payChannel = payChannel;
    }

    public String getOrderSn() {
        return orderSn;
    }

    public void setOrderSn(String orderSn) {
        this.orderSn = orderSn;
    }

    public String getPayNo() {
        return payNo;
    }

    public void setPayNo(String payNo) {
        this.payNo = payNo;
    }

    public String getThirdPartyPaySn() {
        return thirdPartyPaySn;
    }

    public void setThirdPartyPaySn(String thirdPartyPaySn) {
        this.thirdPartyPaySn = thirdPartyPaySn;
    }

    public BigDecimal getPayTotalAmount() {
        return payTotalAmount;
    }

    public void setPayTotalAmount(BigDecimal payTotalAmount) {
        this.payTotalAmount = payTotalAmount;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}
